package com.finger.gulimall.order;

import org.springframework.amqp.rabbit.annotation.EnableRabbit;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;

/**
 * 使用rabbit
 * 1）导入场景启动器
 *      RabbitAutoConfiguration 自动配置 CachingConnectionFactory、RabbitTemplate、amqpAdmin、RabbitMessagingTemplate
 * 2）在配置文件中配置 spring.rabbitmq 前缀的rabbit地址
 * 3）配置类上添加@EnableRabbit注解开始使用rabbit
 * 4）mq监听注解 ，具体Demo在 RabbitTestService中
 *      @RabbitListener （类+方法）用来监听队列即可
 *      @RabbitHandler（方法） 方法重载用来区分不同的消息
 * 5）配置服务器端确认和消费端确认（详见RabbitConfig）
 *
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * 使用seata控制分布式事务
 *  1）、给需要分布式事务的数据库创建undo_log表
 *  2）、安装事务协调器seata-server
 *  3）、整合
 *      1、导入依赖 spring-cloud-starter-alibaba-seata
 *      2、解压并启动seata-server
 *          registry.conf：配置中心配置；修改registry type=nacos
 *          file.conf
 *      3、所有想要用到分布式事务的微服务使用seata DataSourceProxy代理自己的数据源
 *      4、每个微服务。都必须导入
 *          registry.conf
 *          file.conf 并修改每个file.conf文件内容-> vgroup_mapping.{application.name}-fescar-service-group = "default"
 *      5、启动测试分布式事务
 *      6、给分布式大事务的入口标注@GlobalTransactional
 *      7、每一个远程的小事务用@Transactional标注
 * —— —— —— —— —— —— —— —— —— —— —— —— —— —— —— —— —— —— —— —— —— —— —— —— —— —— ——
 *   需要注意的一些问题。注意！！
 *   # 这里一定要注意！seata9.0之后自动代理了数据源，我们可以不用自己配置DataSourceProxy，Seata9.0之后自动代理了
 *   # 如果我们想要手动配置代理数据源，添加下边配置取消自动代理数据源。交给我们代理
 *   # 资料来源 https://www.jianshu.com/p/2117a2177478
 *   # 注意！！ 根据提示写这个（enable-auto-data-source-proxy）配置是不生效的，写成这样生效（enableAutoDataSourceProxy）
 *   seata:
 *    enableAutoDataSourceProxy: false
 *
 * 解决控制台出现Could not found property service.disableGlobalTransaction
 *    file.conf文件中添加
 *    service{
 *        disableGlobalTransaction = false
 *    }
 *
 * 标注的@GlobalTransaction注解的方法里出现数据库插入失败（NotYetSupportException），试着检查检查版本问题
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 *
 *
 *
 *
 *
 *
 *
 */

@EnableRedisHttpSession
@EnableRabbit
@EnableDiscoveryClient
@EnableFeignClients
@SpringBootApplication
public class GulimallOrderApplication {

    public static void main(String[] args) {
        SpringApplication.run(GulimallOrderApplication.class, args);
    }

}
